///////////////////////////////////////////////////////////////////////////////
// Project: Hoyo Client Game
//
// hy_server_copy_data.cpp
// Created: 2013-7-30
// Author: Like Cheng
///////////////////////////////////////////////////////////////////////////////

#include "hy_server_copy_data.h"
#include "hy_common_func/hy_common_func.h"

hy_server_copy_mg_list::hy_server_copy_mg_list()
{	
	m_monster_group_id = 0;
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_mg_list::get_monster_group_id
///////////////////////////////////////////////////////////////////////////////
int	hy_server_copy_mg_list::get_monster_group_id()
{
	return get_json_int( m_json_value, "monster_group_id" );
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_mg_list::get_monster_level
///////////////////////////////////////////////////////////////////////////////
int	hy_server_copy_mg_list::get_monster_level()
{
	return get_json_int( m_json_value, "monster_level" );
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_mg_list::set_json_value
///////////////////////////////////////////////////////////////////////////////
void hy_server_copy_mg_list::set_json_value( Json::Value &v )
{
	m_json_value = v;

	pause_data();
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_mg_list::pause_data
///////////////////////////////////////////////////////////////////////////////
void hy_server_copy_mg_list::pause_data()
{
	
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::hy_server_copy_data
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_data::hy_server_copy_data()
{
	init();
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::~hy_server_copy_data
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_data::~hy_server_copy_data()
{
	std::map< int, hy_server_copy_mg_list* >::iterator it;
	for( it = m_server_copy_gm_list_map.begin(); it != m_server_copy_gm_list_map.end(); it++ )
	{
		DEL_POINTER( it->second );
	}
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::get_ename
///////////////////////////////////////////////////////////////////////////////
const char*	hy_server_copy_data::get_ename()
{
	return get_json_string( m_value, "ename" ).c_str();
}


int	hy_server_copy_data::get_type()
{
	return get_json_int( m_value, "type" );
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::init
///////////////////////////////////////////////////////////////////////////////
const char*	hy_server_copy_data::get_cname()
{
	return get_json_string( m_value, "cname" ).c_str();
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::get_default_level
///////////////////////////////////////////////////////////////////////////////
int	hy_server_copy_data::get_default_level()
{
	return get_json_int( m_value, "default_level" );
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::init
///////////////////////////////////////////////////////////////////////////////
bool hy_server_copy_data::init()
{
	m_value.clear();
	return true;
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::init
///////////////////////////////////////////////////////////////////////////////
void hy_server_copy_data::set_ename( const char* name )
{
	m_value["ename"] = name;
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::init
///////////////////////////////////////////////////////////////////////////////
void hy_server_copy_data::set_cname( const char* name )
{
	m_value["cname"] = name;
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::parse_data
///////////////////////////////////////////////////////////////////////////////
void hy_server_copy_data::parse_data()
{
	Json::Value content = m_value["copy_list"];
	if( content.size() )
	{
		for( uint i = 0u; i < content.size(); i++ )
		{
			Json::Value cv = content[i];

			hy_server_copy_mg_list* ml = new hy_server_copy_mg_list;
			ml->set_json_value( cv );
	
			m_server_copy_gm_list_map.insert( std::make_pair( i+1, ml ) );
		}
	}
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::get_server_copy_mg_list
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_mg_list* hy_server_copy_data::get_server_copy_mg_list( int index )
{
	std::map< int, hy_server_copy_mg_list* >::iterator it = m_server_copy_gm_list_map.find( index );
	if( it != m_server_copy_gm_list_map.end() )
	{
		return it->second;
	}
	return NULL;
}

///////////////////////////////////////////////////////////////////////////////
hy_server_copy_mgr* hy_server_copy_data_instance = NULL;
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::hy_server_copy_data
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_mgr::hy_server_copy_mgr()
{

}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_mgr::~hy_server_copy_mgr
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_mgr::~hy_server_copy_mgr()
{

}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::instance
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_mgr* hy_server_copy_mgr::instance()
{
	if( hy_server_copy_data_instance == NULL )
		hy_server_copy_data_instance = new hy_server_copy_mgr;
	return hy_server_copy_data_instance;
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::purge_instance
///////////////////////////////////////////////////////////////////////////////
void hy_server_copy_mgr::purge_instance()
{
	DEL_POINTER( hy_server_copy_data_instance );
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::add_server_copy_data
///////////////////////////////////////////////////////////////////////////////
bool hy_server_copy_mgr::add_server_copy_data( hy_server_copy_data* d , bool is_update )
{
	hy_server_copy_data_map::iterator it = m_server_copy_data_map.find( d->get_id() );
	if( it != m_server_copy_data_map.end() )
	{
		if( is_update )
		{
			delete it->second;
			it->second = d;
			return true;
		}
	}
	else
	{
		m_server_copy_data_map.insert( std::make_pair( d->get_id(), d ) );
	}
	return true;
}
///////////////////////////////////////////////////////////////////////////////
//hy_server_copy_data::get_server_monster_data
///////////////////////////////////////////////////////////////////////////////
hy_server_copy_data*	hy_server_copy_mgr::get_server_copy_data( int id )
{
	hy_server_copy_data_map::iterator it = m_server_copy_data_map.find( id );
	if( it != m_server_copy_data_map.end() )
	{
		return it->second;
	}
	return NULL;
}
